<!doctype html>
<html lang="zh-cn">
<head>

    <meta charset="utf-8">
    <meta name="generator" content="Hugo 0.57.2" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>OAuth2.0学习 | The Sky of OtsWang</title>
    <meta property="og:title" content="OAuth2.0学习 - The Sky of OtsWang">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content="2018-12-04T09:17:12&#43;08:00">
        
        
    <meta property="article:modified_time" content="2018-12-04T09:17:12&#43;08:00">
        
    <meta name="Keywords" content="golang,go语言,otswang,java,博客,python">
    <meta name="description" content="OAuth2.0学习">
        
    <meta name="author" content="OtsWang">
    <meta property="og:url" content="https://otswang.gitee.io/hugo/post/other/oauth2/">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">

    <link rel="stylesheet" href="/hugo/css/normalize.css">
    
        <link rel="stylesheet" href="/hugo/css/prism.css">
    
    <link rel="stylesheet" href="/hugo/css/style.css">
    <script type="text/javascript" src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

    


    
    
</head>

<body>
<header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="https://otswang.gitee.io/hugo/">
                        The Sky of OtsWang
                    </a>
                
                <p class="description">擅长写HelloWorld的小小码农</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    
                    
                    <a  href="https://otswang.gitee.io/hugo/" title="Home">Home</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/tags/" title="Tags">Tags</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/categories/" title="Categories">Categories</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/archives/" title="Archives">Archives</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/about/" title="About">About</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>


<div id="body">
    <div class="container">
        <div class="col-group">

            <div class="col-8" id="main">
                <div class="res-cons">
                    <article class="post">
                        <header>
                            <h1 class="post-title">OAuth2.0学习</h1>
                        </header>
                        <date class="post-meta meta-date">
                            2018年12月4日
                        </date>
                        
                        <div class="post-meta">
                            <span>|</span>
                            
                                <span class="meta-category"><a href="https://otswang.gitee.io/hugo/categories/other">Other</a></span>
                            
                        </div>
                        
                        
                        
                        <div class="post-content">
                            <p>认证协议</p>

<h2 id="概述">概述</h2>

<p><a href="https://www.draw.io/?lightbox=1&amp;highlight=0000ff&amp;edit=_blank&amp;layers=1&amp;nav=1&amp;title=oauth2.0.xml#R5VdNc5swEP01OqbDN9IRCG5n0s5kxockRxUUoCMjj5Djj1%2FflRFgbOo4nbZOphd79bRard5bLYDcZLH5LOmy%2FCZyxpFj5Rvk3iLHsW0rgD%2BNbFskIKQFClnlxmkA5tWOGdAy6KrKWTNyVEJwVS3HYCbqmmVqhFEpxXrs9iz4eNclLdgJMM8oP0UfqlyV3bkCMkx8YVVRmq2xE7YTC9o5m5M0Jc3F%2BgByU%2BQmUgjVWotNwrgmr%2BNllzxn8VPSLG74w%2BO6WN7dbXY3bbDZW5b0R5CsVn82tN%2BGfqF8ZfgyZ1XbjkCWA59mKKQqRSFqytMBjaVY1TnT21gwKtWCg2mD2SgqVaRFBCDjtGmqrINnFe%2FcWJ13TrWoWYuYeR3xB1NqayqLrpQAaEjkqxBLE6dNXed7JP0rvBm%2FRqxkxs74GW4g%2B4Kdi%2Bf1xQG3iokFU3IL6yTjVFUv4%2BSoKe%2Bi9xskBMOo%2BAZFyeuKXqaXkeJQLGss1qDooJf9AfXC19TLOdUr9VGUogiMAGGM4hClIYpiFM3OSKkJXZeVYvMl3bOyhn4%2BltfsxKRim99g%2FJQhE4WYBmmeEKEZrod223mUB43Ws%2F4So3iCUWDRR9jTjMYRgnTAIAnCt5psHKHI1gY82iL8Pjl28Jhk78okh5NlS2xNJrANpYoJSon%2Bjfe0k1uE3b0BEsDUDMUJIhFyAg65xt8lWIW2TNVDKB0HbHuPpBrs4%2FyvLc27sKUF12xp3oUXEENL87ubSLQPFDn23%2BcFPGpyNrnyBQwmSD65Jh%2B9y9n%2BlVm27ddfpybbxwFZbFOpR91qPllBaMZP7djxzfieyQoyZrJvSZD9Y%2F9%2BDIN2Rej%2FgyYTXNhknGktD7TyJ7TqsIt7kdnhXlRwul%2FdR9c6KoH2lGbR4WfRURzbGwfq8%2BsCtTScBNqXU3%2FqqQqD4fBx2LoPn9hu%2BhM%3D">模型</a></p>

<h2 id="一个例子-github登录csdn">一个例子：GitHub登录CSDN</h2>

<h3 id="简单概述">简单概述</h3>

<p>使用GitHub账号登录CSDN。涉及到的角色有：</p>

<ul>
<li>资源所有者： GitHub账号所有者，用户</li>
<li>第三方应用： CSDN博客服务</li>
<li>授权服务器： GitHub服务器</li>
<li>资源服务器： GitHub服务器，此处授权和资源服务器是一个</li>
<li>代理客户端： 浏览器</li>
</ul>

<h3 id="授权流程">授权流程</h3>

<p>OAuth2.0 定义了四种授权许可类型：授权码、隐式许可，资源所有者密码凭据和客户端凭据。授权码这种方式功能最完整、流程最严密。</p>

<p><a href="https://www.draw.io/?lightbox=1&amp;highlight=0000ff&amp;edit=_blank&amp;layers=1&amp;nav=1&amp;title=oauth2.0.xml#R7Vvfb6M4EP5r%2FJgVNr%2FMI5B0V1rd6aSetHtPJwpOgpaECJwm7V%2B%2FNpgEbLfZpIRGpX0pDGaA%2BWY%2Bj8cTYIar%2Fdci2iz%2FyhOSAWQke2BOAULQQg77xyVPtQSbdi1YFGkiBh0F9%2BkzEUJDSLdpQsrOQJrnGU03XWGcr9ckph1ZVBT5rjtsnmfdp26iBVEE93GUqdIfaUKXQurY1vHCN5Iuls2joePVV1ZRM1p8SrmMknzXEpkzYIZFntP6aLUPScat1xjmOZzHwX9huZpkP37uFpvv3%2FfPk1rZ3Tm3HL6hIGvar2pUq36Msq0wmPhW%2BtRYkKwTnwPBztb5mgmDJV1l7Ayyw3o0SRQQTrwqPNiPeR7JV4QWT%2By%2B3REiW1h92QKnkRUki2j62H1mJDxlcVB3eMI%2FecreBhnCqxEWeoRPe4bRVVHm2yIm4q62SU8oglhSRKNiQaiiiB20PvsoqhA7Az1zjOjZqCf0ZEVDo2eNET3X6Qk9WdHQ6NljRA8aRk%2FwKZqGxs85C784i8oyjT8AhPKcZfZFn4qiKwPovjEAS%2FZ%2BVMW3Et%2BlWTOM6RBnxoeB3OkLclnRC5AzK0dPrWEbPqB8%2BYUtQ%2F%2BcowfVGnv1J6RhhBkGwR3wLDCzgRcAb%2FY1pd%2B2D9VpCAKjOpiCxr4t16NkT7v%2BVpAyfY4eqgHclYQR2Gg7APaUSaIsXay5MzJfIgUTPJKCpmwt44sLqzRJ%2BP1BFj2QLIjiX4si366TMM%2FyonquOa%2F%2BDp7KNZB9x2%2FESku8CTgsb076sKv3YaF9YnyBjuP2NM104J8gyc3y%2BbwkVyEV%2FDkr1BFo95SWKYquPCsgzbTAo9gFgVkdTIEf8rDF7NhowvkOBCHATO4CzwNBwAewkZ7duuQAPON3sQMe8uYYQh6%2FGvIs4u0O2LAXX5yYTjf8vaGi3%2FtMKS7lCzl7v5gvBl4GIA3jvzjrKxTA%2BMI3AIZxnpAx8IF3gg9My8b9cEDDrw0HwMFSAAg%2Fc4BardvTMkFRdO2Y1vA4n9Ax8J1TQcxi35%2Fx8J95wGMXZuH99O8xhDZ8wfcOsY0s2E92PzG9bmwPl95DNNLYlkPSkfn00vlaUXTtLQ%2FjothW41rM6WOIbHQisqEhzbY95fFQmsMHy%2BPhWzfGxpPIK8TQ18JfUdRTbdCx9M%2B5am3Q1OSEyiohimNSlv%2FT%2FBdZj4JXTL3jyin7pR76DunBeVuyHzc9cK0LWUDZ1lM0XTs%2F0GR4M4sX8%2Fjc7%2FJ49XEnUnlmcMcLhCxpCCDAdWTbAFuVxAeeoWYPo4hv69W8gRf8u%2FN7P2kDsiStkoYrhv9b9%2FTHmza4l9b%2FVMIYuodKkysqU3tFAAj4gY4tGKn4FVsotDEGkrBPkoRr4G5EW724oCWzjzUYT5zXOzJmnpBriti8kCdkwlEUXZsm1NSwqgxyhoBVycHltYfAGCkNOK%2FSgPHF8JrqYb8sMJH2CtFwLPAHDUjlMtrwwyimHIRgt0wpud9EMRfuimijWztocLk0yIUWKQgPsLY4wNJwgNzd00ajY82zTTfWNgtoSkhcWm1RIB26zUJXhlWXTQ7AHu%2BO4vXYkB%2BzMewU2wrcFVeRRID7TnEilZY8NUwgGjJOkK7sZPH%2BFL8qbbMXxA6fgtiClKWn3NxVqwuvegc8T71JKyN0a2bW1Qxc3ifEW4UsvrnAXZf5MHNsr9pu8KvVgSgn3KaZLaXT%2Fr3NrFtpqTs2NVVMqx4tH%2Fjwxr3ZVTri39vMmiKmlpplM9u89%2B1Wvdm7OW7WFIvq%2Bc4zK4pg1jXqJUKruxAjwSDYZTTe9BUpXYe9rBi2NC%2Fr32PC1gIiI3OqWT7QnANZMlzT9eJffjJlGfr18DSlSQC5GkBdDaDybsAfAMpOj7%2FSrDOg449dzdlv">授权流程</a></p>

<ul>
<li>用户通过浏览器访问互联网网站，比如CSDN</li>
<li>在浏览器输入CSDN地址，打开登录节点，准备通过GitHub账号登录</li>
<li>CSDN给浏览器返回GitHub授权地址：

<ul>
<li>response_type: 必选项，常量code</li>
<li>client_id: 必选项，客户端唯一标识</li>
<li>redirect_url：跳转地址</li>
<li>scope： 可选，授权范围</li>
<li>state：推荐项，用于维护请求和回调之间的状态的不透明值，可用于防止csrf攻击</li>
</ul></li>
<li>浏览器根据CSDN的响应内容，跳转到GitHub授权地址：登录、授权和返回

<ul>
<li>登录：用户输入凭据登录GitHub</li>
<li>授权：资源范围、有效时限等</li>
<li>返回：redirect_url</li>
<li>code：根据用户授权参数得到授权码</li>
<li>state： 上一步的state原样返回</li>
</ul></li>
<li>浏览器根据GitHub的响应内容，跳转到CSDN服务端，跳转地址中包括code和state。</li>
<li>CSDN服务端获取code，访问GitHub服务端，请求参数:

<ul>
<li>grant_type:i常量authorization_code</li>
<li>code：</li>
<li>redirect_uri：</li>
<li>client_id：必选项，通常CSDN会和GitHub协商（注册），GitHub给CSDN一个唯一标识符</li>
<li>client_secret： 可选</li>
</ul></li>
<li>GitHub服务端验证成功后响应CSDN服务端

<ul>
<li>access_token：必选项，授权服务器颁发的访问令牌，CSDN凭此访问资源</li>
<li>token_type：指令牌类型</li>
<li>expires_in： 推荐，有效期</li>
<li>refresh_token： 必须，access_token失效后获取新的值时的凭据，access_token有效期可能比expires_in短；</li>
</ul></li>
<li>CSDN服务端使用access_token向资源服务器发出资源请求。</li>
<li>资源服务器根据access_token是否合法，响应请求。</li>
<li>CSDN向浏览器响应资源访问成功。</li>
</ul>

<h2 id="bearer-token-与-mac-token">Bearer token 与 Mac token</h2>

<p>Bearer token：</p>

<p>优点： 调用简单，无需对请求签名。</p>

<p>缺点： 需要配合HTTPS保证信息传输安全。 access token 有效期为一个月，过期后需要进行refresh token刷新。</p>

<p>Mac token：</p>

<p>优点： 不依赖于HTTPS，无协议加密带来的性能开销；access token 长期有效，无需refresh token</p>

<p>缺点： 需要进行Mac计算。</p>

<p>一般将token放在authorization 请求头部</p>
                        </div>

                        


                        


                        <div class="post-meta meta-tags">
                            
                            <ul class="clearfix">
                                
                                <li><a href="https://otswang.gitee.io/hugo/tags/%E5%8D%8F%E8%AE%AE">协议</a></li>
                                
                            </ul>
                            
                        </div>
                    </article>
                    
    

    
    
                </div>
            </div>
            <div id="secondary">

    <section class="widget">
        <form id="search" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="https://otswang.gitee.io/hugo/">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/middle_tools/kafka/" title="Kafka">Kafka</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/middle_tools/zk_starter/" title="Zookeeper Starter">Zookeeper Starter</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/java/javafx_starter/" title="Java Fx 入门学习">Java Fx 入门学习</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/codec/" title="常用加密/签名算法">常用加密/签名算法</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/docker/" title="Docker学习">Docker学习</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/webapp/react_starter/" title="React 从入门到入门">React 从入门到入门</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/lang/csharpe_starter/" title="C#语言从入门到入门">C#语言从入门到入门</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/java/java8time/" title="Java checklist">Java checklist</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/keyboard/" title="快捷键记录">快捷键记录</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/vim/" title="vim 使用记录">vim 使用记录</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">分类</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/algorithm/">algorithm(4)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/design/">design(7)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/doc/">doc(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/go/">go(3)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java/">java(7)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-java8inaction/">java-java8inaction(11)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-juc/">java-juc(3)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-jvm/">java-jvm(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-spring/">java-spring(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-thinkinginjava/">java-thinkinginjava(11)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/middletools/">middletools(9)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/other/">other(24)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/qt/">qt(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/smallquickappweb/">smallquickappweb(4)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/webapp/">webapp(1)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/%E5%B0%8F%E4%BC%97%E8%AF%AD%E8%A8%80%E4%B8%80%E7%9E%A5/">小众语言一瞥(4)</a>
    </li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title">标签</h3>
<div class="tagcloud">
    
    <a href="https://otswang.gitee.io/hugo/tags/c/">c#</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/checklist/">checklist</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/codec/">codec</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/docker/">docker</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/elk/">elk</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/emmet/">emmet</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/file/">file</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/freemarker/">freemarker</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/git/">git</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/go/">go</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/http/">http</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/interview/">interview</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/java/">java</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/javascript/">javascript</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/juc/">juc</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/jvm/">jvm</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/keyboard/">keyboard</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/linux/">linux</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/lua/">lua</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/manjaro/">manjaro</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/map/">map</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/markdown/">markdown</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mq/">mq</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mybatis/">mybatis</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mycat/">mycat</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mysql/">mysql</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/nginx/">nginx</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/qt/">qt</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/react/">react</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/redis/">redis</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/rust/">rust</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/spring/">spring</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/springboot/">springboot</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/stream/">stream</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/tcp/">tcp</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/thymeleaf/">thymeleaf</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/tree/">tree</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/uml/">uml</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/vim/">vim</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/vlang/">vlang</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/vue/">vue</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/zookeeper/">zookeeper</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E4%BD%8D%E8%BF%90%E7%AE%97/">位运算</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%8D%8F%E8%AE%AE/">协议</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%A4%9A%E7%BA%BF%E7%A8%8B/">多线程</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%B9%B6%E5%8F%91%E9%9B%86%E5%90%88/">并发集合</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/">微信小程序</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%BF%AB%E5%BA%94%E7%94%A8/">快应用</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E6%97%B6%E9%97%B4%E7%B1%BB/">时间类</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8E/">模板引擎</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E7%AE%97%E6%B3%95/">算法</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E7%BC%96%E7%A8%8B/">编程</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83/">编程规范</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E8%AE%BE%E8%AE%A1/">设计</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">设计模式</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E9%99%90%E6%B5%81/">限流</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/">面向对象</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E9%9D%A2%E8%AF%95/">面试</a>
    
</div>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="https://otswang.gitee.io/hugo/index.xml">文章 RSS</a></li>
        </ul>
    </section>

    

</div>
        </div>
    </div>
</div>
<footer id="footer">
    <div class="container">
        &copy; 2020 <a href="https://otswang.gitee.io/hugo/">The Sky of OtsWang By OtsWang</a>.
        Powered by <a rel="nofollow noreferer noopener" href="https://gohugo.io" target="_blank">Hugo</a>.
        <a href="https://www.flysnow.org/" target="_blank">Theme</a> based on <a href="https://github.com/Dudiao137/maupassant-hugo" target="_blank">maupassant-ots</a>.
        
    </div>
</footer>


    <script type="text/javascript">
    
    (function(){
        $("pre code").parent().addClass("line-numbers")
    }())

    window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
    };
    </script>
    <script type="text/javascript" src="/hugo/js/prism.js" async="true"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src="/hugo/js/totop.js?v=0.0.0" async=""></script>







 
 <script src="https://mermaidjs.github.io/scripts/mermaid.min.js"></script>
 <script>
       mermaid.initialize({ startOnLoad: true });
 </script>
</body>
</html>
